package androids.dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Collection;

import com.mysql.jdbc.Statement;

import androids.excepcion.DAOExcepcion;

import androids.modelo.UsuarioModelo;
import androids.util.ConexionBD;

public class UsuarioDAO extends BaseDAO{
	
//	public Collection<Rol> buscarPorNombre(String nombre) throws DAOExcepcion {
//	System.out.println("RolDAO: buscarPorNombre(String nombre)");
//	String query = "SELECT rol_nombre, descripcion FROM rol WHERE rol_nombre like ?";
//	Collection<Rol> lista = new ArrayList<Rol>();
//	Connection con = null;
//	PreparedStatement stmt = null;
//	ResultSet rs = null;
//	try {
//		con = ConexionBD.obtenerConexion();
//		stmt = con.prepareStatement(query);
//		stmt.setString(1, "%" + nombre + "%");
//		rs = stmt.executeQuery();
//		while (rs.next()) {
//			Rol vo = new Rol();
//			vo.setRolNombre(rs.getString("rol_nombre"));
//			vo.setDescripcion(rs.getString("descripcion"));
//			lista.add(vo);
//		}
//	} catch (SQLException e) {
//		System.err.println(e.getMessage());
//		throw new DAOExcepcion(e.getMessage());
//	} finally {
//		this.cerrarResultSet(rs);
//		this.cerrarStatement(stmt);
//		this.cerrarConexion(con);
//	}
//	return lista;
//}

public void insertar(UsuarioModelo vo) throws DAOExcepcion {
	System.out.println("ProductoDAO: insertar(Usuario vo)");
	String query = "INSERT INTO usuario(id_usuario, nombre, ap_paterno, ap_materno, dni, edad, email, direccion, id_historial) VALUES (?,?,?,?,?,?,?,?,?)";
	Connection con = null;
	PreparedStatement stmt = null;
	try {
		con = ConexionBD.obtenerConexion();
		stmt = con.prepareStatement(query);
		stmt.setInt(1, vo.getIdUsuario());
		stmt.setString(2, vo.getNombre());
		stmt.setString(3, vo.getApPaterno());
		stmt.setString(4, vo.getApMaterno());
		stmt.setString(5, vo.getDni());
		stmt.setString(6, vo.getEdad());
		stmt.setString(7, vo.getEmail());
		stmt.setString(8, vo.getDireccion());
		stmt.setInt(9, vo.getIdHistorial());
		int i = stmt.executeUpdate();
		if (i != 1) {
			throw new SQLException("No se pudo insertar el usuario");
		}
		stmt.close();
		con.close();
	} catch (SQLException e) {
		System.err.println(e.getMessage());
		throw new DAOExcepcion(e.getMessage());
	} finally {
		this.cerrarStatement(stmt);
		this.cerrarConexion(con);
	}
}

//public Producto obtener(Integer productoId) throws DAOExcepcion {
//	System.out.println("ProductoDAO: obtener(Integer productoId)");
//	Producto vo = new Producto();
//	Connection con = null;
//	PreparedStatement stmt = null;
//	ResultSet rs = null;
//	try {
//		String query = "select id_producto, id_categoria, id_proveedor, nombre, stock, precio, numserie from producto where id_producto=?";
//		con = ConexionBD.obtenerConexion();
//		stmt = con.prepareStatement(query);
//		stmt.setInt(1, productoId);
//		rs = stmt.executeQuery();
//		if (rs.next()) {
//			vo.setIdProducto(rs.getInt(1));
//			vo.setCategoria(rs.getInt(2));
//			vo.setProveedor(rs.getInt(3));
//			vo.setNombre(rs.getString(4));
//			vo.setStock(rs.getString(5));
//			vo.setPrecio(rs.getString(6));
//			vo.setNumSerie(rs.getInt(7));
//		}
//	} catch (SQLException e) {
//		System.err.println(e.getMessage());
//		throw new DAOExcepcion(e.getMessage());
//	} finally {
//		this.cerrarResultSet(rs);
//		this.cerrarStatement(stmt);
//		this.cerrarConexion(con);
//	}
//	return vo;
//}

//public void eliminar(Integer idProducto) throws DAOExcepcion {
//	System.out.println("RolDAO: eliminar(Integer idProducto)");
//	String query = "DELETE FROM producto WHERE id_producto=?";
//	Connection con = null;
//	PreparedStatement stmt = null;
//	try {
//		con = ConexionBD.obtenerConexion();
//		stmt = con.prepareStatement(query);
//		stmt.setInt(1, idProducto);
//		int i = stmt.executeUpdate();
//		if (i != 1) {
//			throw new SQLException("No se pudo eliminar");
//		}
//	} catch (SQLException e) {
//		System.err.println(e.getMessage());
//		throw new DAOExcepcion(e.getMessage());
//	} finally {
//		this.cerrarStatement(stmt);
//		this.cerrarConexion(con);
//	}
//}

public void actualizar(UsuarioModelo vo) throws DAOExcepcion {
	System.out.println("UsuarioDAO: actualizar(Usuario vo)");
	String query = "update usuario set nombre=?, ap_paterno=?, ap_materno=?, dni=?, edad=?, email=?, direccion=?, id_historial=? where id_usuario=?";
	Connection con = null;
	PreparedStatement stmt = null;
	try {
		con = ConexionBD.obtenerConexion();
		stmt = con.prepareStatement(query);
		stmt.setString(1, vo.getNombre());
		stmt.setString(2, vo.getApPaterno());
		stmt.setString(3, vo.getApMaterno());
		stmt.setString(4, vo.getDni());
		stmt.setString(5, vo.getEdad());
		stmt.setString(6, vo.getEmail());
		stmt.setString(7, vo.getDireccion());
		stmt.setInt(8, vo.getIdHistorial());
		stmt.setInt(9, vo.getIdUsuario());
		int i = stmt.executeUpdate();
		if (i != 1) {
			throw new SQLException("No se pudo modificar el usuario");
		}
	} catch (SQLException e) {
		System.err.println(e.getMessage());
		throw new DAOExcepcion(e.getMessage());
	} finally {
		this.cerrarStatement(stmt);
		this.cerrarConexion(con);
	}
}

public Collection<UsuarioModelo> listarUsuarios(String ref){
	Collection<UsuarioModelo> c = new ArrayList<UsuarioModelo>();
	Connection con = null;
	Statement stmt = null;
	ResultSet rs = null;
	String sql = "SELECT codusuario,nomuno,nomdos,apepaterno,apematerno,sexo,telefono,estado FROM usuario WHERE " 
			 + "nomuno like '%" + ref + "%' OR nomdos like '%" + ref + "%' OR apepaterno like '%" + ref + "%' OR apematerno like '%" + ref + "%' OR telefono like '%" + ref + "%'";
	try{
		con = ConexionBD.obtenerConexion();
		stmt = (Statement) con.createStatement();
		rs = stmt.executeQuery(sql);
		while(rs.next()){
			UsuarioModelo vo = new UsuarioModelo();
			vo.setIdUsuario(rs.getInt(1));
			vo.setNombre(rs.getString(2));
			vo.setApPaterno(rs.getString(3));
			vo.setApMaterno(rs.getString(4));
			vo.setDni(rs.getString(5));
			vo.setEdad(rs.getString(6));
			vo.setEmail(rs.getString(7));
			vo.setDireccion(rs.getString(8));
			vo.setIdHistorial(rs.getInt(9));
			c.add(vo);
		}
		rs.close();
        stmt.close();
        con.close();
	}catch(SQLException e){
		e.printStackTrace();
	}
	return c;
}
}

//public Collection<Rol> listar() throws DAOExcepcion {
//	System.out.println("RolDAO: listar()");
//	Collection<Rol> c = new ArrayList<Rol>();
//	Connection con = null;
//	PreparedStatement stmt = null;
//	ResultSet rs = null;
//	try {
//		con = ConexionBD.obtenerConexion();
//		String query = "SELECT rol_nombre,descripcion from rol";
//		stmt = con.prepareStatement(query);
//		rs = stmt.executeQuery();
//		while (rs.next()) {
//			Rol vo = new Rol();
//			vo.setRolNombre(rs.getString("rol_nombre"));
//			vo.setDescripcion(rs.getString("descripcion"));
//			c.add(vo);
//		}
//	} catch (SQLException e) {
//		System.err.println(e.getMessage());
//		throw new DAOExcepcion(e.getMessage());
//	} finally {
//		this.cerrarStatement(stmt);
//		this.cerrarConexion(con);
//	}
//	return c;
//}
